<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script src="./scripts/vue.js"></script>
</head>

<body>

  <div id="app">
    <div>
      <span>用户名：</span>
      <span>
        <!-- 1. 使用 v-model 将值同步到 data 中 -->
        <input type="text" v-model.lazy="val" />
      </span>
      <span>{{ tip }}</span>
    </div>
  </div>

  <script>
    var vm = new Vue({
      el: '#app',
      data: {
        val: '',  // 用户输入的值
        tip: '' // 用户提示信息
      },
      methods: {
        // 3. 处理验证的逻辑
        validVal (newVal) {
          setTimeout(() => {
            if (newVal === 'admin') {
              this.tip = '用户名已经存在，请换一个'
            } else {
              this.tip = '用户名可以使用……'
            }
          }, 1000)
        }
      },
      watch: {
        // 2. 对用户输入值的 val 进行监听
        val: function (newVal) {
          this.tip = '正在验证中……'
          // 将验证逻辑抽取成一个方法，并调用
          this.validVal(newVal)
        }
      }
    })
  </script>
</body>

</html>